Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


tests/backend/eect/asserts.py 0ae5f2bda55128261e22725815ffa67aa5b924fa (0ae5f2bd) Text, 1.82 KB

T8b949e# SPDX-License-Identifier: 0BSD
T8b949e"""Shared oracles for EECT packs."""

Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations

Tff7b72from T7ee787typing Tff7b72import Te6edf3Any


Tff7b72def Td2a8ffassert_no_unexpected_http_500Tb4b4b4(Te6edf3statusTb4b4b4: Tffa657intTb4b4b4, Te6edf3bodyTb4b4b4: Te6edf3Any Tff7b72= Tff7b72NoneTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""EECT HTTP oracle: unexpected 500s fail; 4xx/503 are recoverable."""
Tff7b72if Te6edf3status Tff7b72== T79c0ff500Tb4b4b4:
Tff7b72raise Tf85149AssertionErrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffunexpected HTTP 500 body=Tffd700{Te6edf3bodyTffd700!r}Ta5d6ff"Tb4b4b4)


Tff7b72def Td2a8ffassert_recoverable_missing_pathTb4b4b4(Te6edf3excTb4b4b4: Tf85149BaseExceptionTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""Direct send without path must surface TimeoutError, not an opaque crash."""
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3excTb4b4b4, Tf85149TimeoutErrorTb4b4b4)Tb4b4b4, Ta5d6fffTa5d6ff"Ta5d6ffexpected TimeoutError, got Tffd700{Tffa657typeTb4b4b4(Te6edf3excTb4b4b4)Tffd700}Ta5d6ff"
Te6edf3msg Tff7b72= Tffa657strTb4b4b4(Te6edf3excTb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ffpathTa5d6ff" Tff7b72in Te6edf3msgTb4b4b4, Ta5d6fffTa5d6ff"Ta5d6ffTimeoutError should mention path: Tffd700{Te6edf3excTffd700}Ta5d6ff"


Tff7b72def Td2a8ffassert_identity_paths_isolatedTb4b4b4(Te6edf3path_aTb4b4b4: Tffa657strTb4b4b4, Te6edf3path_bTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72assert Te6edf3path_a Tff7b72!= Te6edf3path_b
Tff7b72assert Ta5d6ff"Ta5d6ffidentitiesTa5d6ff" Tff7b72in Te6edf3path_aTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Tffea00\\Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ffidentitiesTa5d6ff" Tff7b72in Te6edf3path_bTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Tffea00\\Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3path_aTff7b72.Td2a8ffrstripTb4b4b4(Ta5d6ff"Ta5d6ff/Tffea00\\Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff"Ta5d6ffdatabase.dbTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ffdatabase.dbTa5d6ff" Tff7b72in Te6edf3path_a
Tff7b72assert Te6edf3path_bTff7b72.Td2a8ffrstripTb4b4b4(Ta5d6ff"Ta5d6ff/Tffea00\\Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff"Ta5d6ffdatabase.dbTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ffdatabase.dbTa5d6ff" Tff7b72in Te6edf3path_b


Tff7b72def Td2a8ffassert_preview_cappedTb4b4b4(Te6edf3contentTb4b4b4: Tffa657str Tff7b72| Tff7b72NoneTb4b4b4, Te6edf3max_charsTb4b4b4: Tffa657int Tff7b72= T79c0ff240Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3content Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3contentTb4b4b4) Tff7b72<Tff7b72= Te6edf3max_charsTb4b4b4, Ta5d6fffTa5d6ff"Ta5d6ffpreview len Tffd700{Tffa657lenTb4b4b4(Te6edf3contentTb4b4b4)Tffd700}Ta5d6ff > Tffd700{Te6edf3max_charsTffd700}Ta5d6ff"


Tff7b72def Td2a8ffassert_diagnostic_text_redactedTb4b4b4(Te6edf3textTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""Oracle: diagnostic dumps must not keep raw absolute paths or full 32-byte hex hashes."""
Te6edf3lower Tff7b72= Te6edf3textTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ff/tmp/Ta5d6ff" Tff7b72not Tff7b72in Te6edf3lower
Tff7b72assert Ta5d6ff"Tffea00\\Ta5d6ffusersTffea00\\Ta5d6ff" Tff7b72not Tff7b72in Te6edf3lower
Tff7b72assert Ta5d6ff"Ta5d6ff/home/Ta5d6ff" Tff7b72not Tff7b72in Te6edf3lower
Tff7b72assert Ta5d6ff"Ta5d6ff/users/Ta5d6ff" Tff7b72not Tff7b72in Te6edf3lower
T8b949e# Full 32-byte hex destination/identity hash (64 hex chars)
Tff7b72import T7ee787re

Te6edf3full_hashes Tff7b72= Te6edf3reTff7b72.Td2a8fffindallTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ff(?<![0-9a-f])[0-9a-f]Tffd700{64}Ta5d6ff(?![0-9a-f])Ta5d6ff"Tb4b4b4, Te6edf3lowerTb4b4b4)
Tff7b72assert Tff7b72not Te6edf3full_hashesTb4b4b4, Ta5d6fffTa5d6ff"Ta5d6ffunredacted full hashes remain: Tffd700{Te6edf3full_hashesTb4b4b4[Tb4b4b4:T79c0ff3Tb4b4b4]Tffd700}Ta5d6ff"


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────